/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package apresentacao;

import java.util.ArrayList;
import java.util.Collections;
import Modulo9.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Pedro
 * @author Thiago
 */
public class Dados {
    
    private ArrayList<String> aprovadas;
    private ArrayList<String> todasElet;
    private ArrayList<String> possiveisElet;
    private ArrayList<String> prefixos;
    
    private int codigoCurso;
    private String anoCatalogo;
    private double cp;
    
    private final InteracaoBanco bd;
    
    public Dados () {
        this.possiveisElet = new ArrayList<>();
        
        this.bd = new InteracaoBanco();
        this.bd.initDriver();
    }
    
    public void recebeAprovadas () {
        // MODULO 9 DUMMY - CRIA TODAS AS DISCIPLINAS CURSADAS PELO ALUNO
        
        Integralizacao integr = null;
        
        // tenta instanciar uma Integralizacao com o caminho do arquivo passado
        try {
            integr = new Integralizacao("./extra/integralizacao.txt");
        } catch (IncorrectFileException fe) {
            System.err.println("Arquivo de integralizacao incorreto. " + fe);
            System.exit(1);
        } catch (FileNotFoundException fnf) {
            System.err.println("Arquivo de integralizacao nao encontrado. " + fnf);
            System.exit(1);
        } catch (IOException ioe) {
            System.err.println("Erro de entrada/saida. " + ioe);
            System.exit(1);
        }
        
        ArrayList<DisciplinaCursada> discipAprovadas = new ArrayList<DisciplinaCursada> (integr.getDisciplinasAprovadas());
        this.aprovadas = new ArrayList<>(); // Ou aprovadas tem a resposta ou esta vazio.
        
        try {
            if ( !discipAprovadas.isEmpty() ) {
                for (DisciplinaCursada d : discipAprovadas) {
                    String materia = d.getMateria();
                    if (materia == null) {
                        System.err.println("Materia nula.");
                    }
                    else if (materia.equals("")) {
                        System.err.println("Materia vazia.");
                    }
                    else {
                        this.aprovadas.add(materia);
                    }
                }
            }
        } catch (NullPointerException e) {
            System.err.println("Disciplinas aprovadas geradas erroneamente. NullPointerException: " + e);
        }
        
        this.codigoCurso = integr.getCodigoCurso();
        this.anoCatalogo = integr.getAnoCatalogo();
        this.cp = integr.getCP();
    }
    
    public void recebeTodasElet () {
        // MODULO 5 DUMMY - CRIA TODAS AS ELETIVAS DO CURSO
        this.todasElet = bd.getTodasElet(this.codigoCurso, this.anoCatalogo);
    }
    
    public void addPossivelElet (String s) {
        if (s != null) {
            this.possiveisElet.add(s);
        }
    }
    
    public ArrayList<String> getTodasElet () {
        return this.todasElet;
    }
    
    public ArrayList<String> getAprovadas () {
        return this.aprovadas;
    }
    
    public ArrayList<String> getPossiveisElet () {
        return this.possiveisElet;
    }
    
    public ArrayList<String> getPrefixos () {
        return this.prefixos;
    }
    
    public int getCodigoCurso () {
        return this.codigoCurso;
    }
    
    public String getAnoCatalogo () {
        return this.anoCatalogo;
    }
    
    public double getCP () {
        return this.cp;
    }
    
    public int getQtdFamilia (String discip) {
        return this.bd.getQtdFamilia(discip);
    }
    
    public ArrayList<String> getListaPreReq (String discip, int familia) {
        return this.bd.getListaPreReq (discip, familia);
    }
    
    public String getNomeDiscip (String codigoDiscip) {
        return this.bd.getNomeDiscip(codigoDiscip);
    }
    
    public void setPrefixos (ArrayList<String> pref) {
        this.prefixos = pref;
        Collections.sort(prefixos);
    }
    
    /* 
    METODOS APENAS PARA DEBUGGING
    */
    public void printArray (ArrayList <String> arr, String nomeArr) {
        if (arr == null) {
            System.out.println(nomeArr + " = null.");
        }
        else if (arr.isEmpty()) {
            System.out.println(nomeArr + " esta vazio.");
        }
        else {
            System.out.print (nomeArr + ":");
            for (String s : arr) {
                System.out.print (" " + s);
            }
            System.out.println ("");
        }
    }
}
